﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Shapes;
using MySql;
using MySql.Data.MySqlClient;
using SqlSugar;
using WpfApp3.Data;
using WpfApp3.Models;

namespace WpfApp3.Data_Operations
{
    public class Mysqloperations
    {

        
     
        private readonly SqlSugarClient db_mysql = Mysqloperations.DbContext_mysql;
        public static SqlSugarClient DbContext_mysql { get; } = new SqlSugarClient(new ConnectionConfig
        {
            //SqlSugarClient是一个数据库操作客户端，用于连接和操作数据库。
            //通过new SqlSugarClient(new ConnectionConfig {...})来初始化           //首先，需要导入MySQL的命名空间，并定义连接字符串。连接字符串包含服务器地址、
            //                                                                     数据库名称、用户名和密码等信息。
            ConnectionString = "server=localhost;database=person;user id=root;password=wtw20070519;pooling=true;",//指定了数据库连接字符串

            /*这是连接 MySQL 数据库的关键配置，格式为 key1 = value1; key2 = value2; ...。常用参数包括：
                server：数据库服务器地址（如 localhost 或 IP 地址）
                database：要连接的数据库名称（如 test1）
                user id：用户名（如 root）
                password：密码（如 root）
                pooling：是否启用连接池（true 或 false）
                charset：字符集（如 utf8 或 utf8mb4）*/

            DbType = SqlSugar.DbType.MySql,//明确数据库类型 支持多种数据库（如 SQL Server、MySQL、Oracle 等）
            IsAutoCloseConnection = true,//IsAutoCloseConnection设置为true表示自动关闭数据库连接；
            InitKeyType = InitKeyType.Attribute //识别主键 通过实体类的属性特性（如 [SugarColumn(IsPrimaryKey = true)]）？
        });
        
        /* public  Mysql()
         {

             using (MySqlConnection connection = new MySqlConnection(connectionString)) 
             {
                 // 在进行数据库操作之前，需要打开数据库连接。操作完成后，关闭连接以释放资源
                 try
                 {
                     connection.Open();
                     Console.WriteLine("数据库连接成功！");
                 }
                 catch (Exception ex)
                 {
                     Console.WriteLine("数据库连接失败：" + ex.Message);
                 }
                 //可以使用MySqlCommand对象执行SQL语句来实现数据的插入、删除和更新操作

             }
             ExecuteNonQuery(@"
                 CREATE TABLE IF NOT EXISTS Persons (
                     Id INT PRIMARY KEY AUTO_INCREMENT,
                     Name TEXT,
                     Age TEXT,
                     Gender TEXT,
                     Characteristics TEXT,
                     Marital TEXT,
                     Political TEXT,
                     Remarks TEXT
                 )", null);


         }          

             //执行不返回数据的非查询sql语句                            //sql语句内容                    //参数数组
         public int ExecuteNonQuery(string sql, params MySqlParameter[] parameters)
         {
             using (var connection = new MySqlConnection(connectionString))
             using (var command = new MySqlCommand(sql, connection))//SQL命令内容对应commnand命令操作
             {
                 try
                 {
                     connection.Open();
                     if (parameters != null)
                         command.Parameters.AddRange(parameters);//将要操作的参数集合添加到MySQL命令对象command,Parameters中，这是命令操作的参数集合
                     return command.ExecuteNonQuery();//执行操作，执行不返回结果集的 SQL 命令，只返回受影响的行数
                 }
                 catch (Exception ex)
                 {
                     Console.WriteLine($"SQL执行失败：{ex.Message}");
                     throw; // 让调用者处理异常
                 }
             }
         }
         */


        public Mysqloperations() 
        {
            EnsureDatabaseInitialized();
        }
        private void EnsureDatabaseInitialized()
        {

            try
            {
               

                // 执行数据库连接和表创建
                CreateTableIfNotExists();
                MessageBox.Show("MySql数据库初始化成功");
            }
            catch (Exception ex)
            {
                MessageBox.Show($"mysql数据库初始化失败: {ex.Message}");
                // 实际项目中建议记录日志
                Debug.WriteLine($"mysql初始化错误: {ex}");
            }
        }
        private void CreateTableIfNotExists()
        {
            db_mysql.CodeFirst.InitTables(typeof(Person));//根据 Person 实体类的定义，自动创建对应的数据库表
                                                    // 如果表已存在，默认不会修改（可配置为自动更新）
                                                    // 支持一次性创建多个表（传入多个类型）；db.CodeFirst.InitTables(
                                                    //typeof(Person), 
                                                    //typeof(Order), 
                                                    //typeof(Product)
                                                    //  );  //一次性创建多个表
        }





        public void AddPerson(Person person)
        {
            // 插入并返回自增 Id
            var identity = db_mysql.Insertable(person).ExecuteReturnIdentity();
            person.Id = Convert.ToInt32(identity); // 将 Id 赋值给实体
      
        }

        // 从数据库中删除人员
        public void DeletePerson(string name)
        {
            db_mysql.Deleteable<Person>().Where(p => p.Name == name).ExecuteCommand();
        }

        // 修改数据库中的人员信息
        public void UpdatePerson(Person person)
        {
            db_mysql.Updateable(person).ExecuteCommand();
        }

        // 从数据库中获取所有人员信息
        public List<Person> GetAllPersons()
        {
            return db_mysql.Queryable<Person>().ToList();
        }

        // 使用原生 SQL 查询
        public List<Person> GetPersonsByNativeSql()
        {
            string sql = "SELECT * FROM Persons";
            return db_mysql.Ado.SqlQuery<Person>(sql);
        }
    }

}
